package com.platform.common.web.controller;

import com.github.pagehelper.PageHelper;
import com.platform.common.web.utils.Pager;
import com.platform.common.web.utils.PagerContext;
import com.platform.modules.sys.domain.SysUser;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.util.Date;

/**
 * @author LENOVO
 * @title: BaseControllerU
 * @date 2019-08-2720:31
 */
public class BaseController {

    /**
     * 获取用户信息
     */
    protected SysUser getSysUser() {
        return (SysUser) SecurityUtils.getSubject().getPrincipal();
    }

    /**
     * 将前台传递过来的日期格式的字符串，自动转化为Date类型
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        // Date 类型转换
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) {
                setValue(parseDate(text));
            }
        });
    }

    /**
     * 前台日期格式
     */
    private static String[] parsePatterns = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};


    /**
     * 日期型字符串转化为日期 格式
     */
    private static Date parseDate(Object str) {
        if (str == null) {
            return null;
        }
        try {
            return DateUtils.parseDate(str.toString(), parsePatterns);
        } catch (ParseException e) {
            return null;
        }
    }

    /**
     * 设置请求分页数据
     */
    protected void startPage(String orderBy) {
        Pager<Object> pager = PagerContext.getPager();
        PageHelper.startPage(pager.getCurrent(), pager.getLimit(), orderBy);
    }

    /**
     * 设置请求分页数据
     */
    protected void startPage(Integer limit, String orderBy) {
        PageHelper.startPage(0, limit, orderBy);
    }

    /**
     * 设置排序数据
     */
    protected void orderBy(String orderBy) {
        PageHelper.orderBy(orderBy);
    }

}
